Methodlar
Methodlar
fonksiyonlara benzerlik gösterse de struct içerisinde tanımlanmalarından dolayı farklılık gösterirler. Metotlar her zaman ilk parametre olarak self
değerine yani kendilerine sahiptir. Bu da struct yapısını çağıran yapıya işaret etmektedir.
Hadi bir karenin içeriğini ifade eden bir struct oluşturalım.
struct Kare{
genislik: u32,
uzunluk: u32,
}
Sonrasında bu kare tipine sahip bir değişkeni main()
içerisinde oluşturalım.
fn main(){
let kare1 = Kare{
genislik: 5,
uzunluk: 5,
}
}
Rust içerisinde bir struct
yapısına method
eklemek için impliment
kelimesinin kısaltması olan impl
anahtar kelimesini kullanabiliriz. Sonrasında da hangi struct
yapısına methodumuzu ekleyeceksek o yapının ismini vermemiz gerekmektedir.
impl Kare{
}
Üstte ifade edildiği şekilde oluşturulduktan sonra içerisine methodlarımızı fonksiyon olarak verebiliriz. Unutmamamız gereken şey bu yapının ilk parametre olarak self
yani struct
yapısının kendisini aldığıdır.
impl Kare{
fn alan_bul(&self) -> u32{
self.genislik * self.uzunluk
}
}
Bu şekilde kendi içersinde daha önceden tanımladığımız değerlere erişebilir ve fonksiyonu çalıştırabiliriz. Fonksiyonu çalıştırmak için Kare
struct'ı ile oluşturduğumuz değişkene .
koyarak fonksiyonun ismini yazabiliriz.
fn main(){
let kare1 = Kare{
genislik: 5,
uzunluk: 5,
};
println!("{}", kare1.alan_bul())
}
Rust içerisinde impl
ile struct
'ların içerisinde istediğimiz kadar method oluşturabiliriz.
Peki bir mutable
yani değiştirilebilir struct yapmak istesek nasıl yapacağız? Bu işlemi yapmak için kare1
olarak tanımladığımız değeri mutable
yapmamız gerekmektedir.
fn main(){
let mut kare1 = Kare{
genislik: 5,
uzunluk: 5,
};
println!("{}", kare1.alan_bul())
}
Sonrasında bu işlemi yeni bir method oluşturarak halledebiliriz.
impl Kare{
fn alan_bul(&self) -> u32{
self.genislik * self.uzunluk
}
fn uzunluk_degistir(&mut self, yeni_uzunluk: u32){
self.uzunluk = yeni_uzunluk;
}
}
Sonrasında oluşturduğumuz bu methodu main()
içerisinde istediğimiz uzunluk değeri ile değiştirebiliriz.
fn main(){
let mut kare1 = Kare{
genislik: 5,
uzunluk: 5,
};
println!("{}", kare1.uzunluk()) // 5
kare1.uzunluk_degistir(10);
println!("{}", kare1.uzunluk()) // 10
}
Ayrıca mutable bir referans kullanmaya dikkat etmemiz gerekmektedir.